# 工具函数
from datetime import datetime,timezone
from django.contrib.auth import get_user_model
# 导入验证码数据表模型类
from home.models import VerifyCode, UserProfile

# 检测账号是否存在
# field: 可选值 username, email, phone
def check_user(field,value):
    # 可以检测的字段
    fields={'username':'用户名','email':'电子邮箱','phone':'手机号码'}
    keys=fields.keys()
    if field not in keys:
        return False,f'参数错误,参数field必须{','.join(keys)}是中的一个'
    # 动态获取用户表模型类
    User=get_user_model()
    filter_map={field:value}
    is_valid=True
    if field in ['username','email']:
        is_valid=User.objects.filter(**filter_map).exists()
    elif field in ['phone']:
        is_valid=UserProfile.objects.filter(**filter_map).exists()
    if is_valid:
        return False,f'{fields[field]}已存在'
    return True,f'{fields[field]}可用'


# 检测验证码是否合法
# phone: 手机号码
# verify_code: 验证码
def check_verify_code(phone,verify_code):
    try:
        query_dict = VerifyCode.objects.get(content=verify_code)
        # 说明验证码已经被验证过了
        if query_dict.status:
            # 验证码失效
            return False,'验证码已使用'
        # 检查验证码是否过期: 日期进行比较, 时区信息必须相同
        if query_dict.expires.astimezone(timezone.utc)<datetime.now(timezone.utc):
            # 验证码已过期
            return False,'验证码已过期'
        # 如果为登录状态
        if phone:
            # 更新验证码状态
            query_dict.phone=phone
            query_dict.status=1
            # 保存更新
            query_dict.save()
        return True,'验证成功'
    except VerifyCode.DoesNotExist:
        return False, '验证码不存在'

